package com.team2.hospital.controller;

import com.team2.hospital.entity.Bed;
import com.team2.hospital.service.BedService;
import com.team2.hospital.utils.ResponseData;
import com.team2.hospital.utils.TodayUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.Optional;

@RestController
@RequestMapping("bed")
public class BedController {
    @Autowired
    private BedService bedService;

    /**
     * 查找所有空床位
     *
     * @return 返回所有空床位信息
     */
    @RequestMapping("findNullBed")
    public ResponseData findNullBed() {
        System.out.println("[findNullBed] 请求开始，时间：" + System.currentTimeMillis());
        // 调用 bedService 中的 findNullBed 方法查找所有空床位
        return ResponseData.success("查找所有空床位成功", this.bedService.findNullBed());
    }

    /**
     * 更新床位信息
     *
     * @param bed 床位信息
     * @return 返回更新结果
     */
    @RequestMapping("updateBed")
    public ResponseData updateBed(Bed bed) {
        System.out.println("[updateBed] 请求开始，时间：" + System.currentTimeMillis() + "，bed：" + bed);
        // 调用 bedService 中的 updateBed 方法更新床位信息
        if (this.bedService.updateBed(bed))
            return ResponseData.success("增加床位成功！");
        return ResponseData.fail("增加床位失败！");
    }

    /**
     * 根据病人ID查询床位信息
     *
     * @param pId 病人ID
     * @return 返回床位信息
     */
    @RequestMapping("findBedByPid")
    public ResponseData findBedByPid(@RequestParam(value = "pId") int pId) {
        System.out.println("[findBedByPid] 请求开始，时间：" + System.currentTimeMillis() + "，pId：" + pId);
        // 调用 bedService 中的 findBedByPid 方法根据病人ID查询床位
        return ResponseData.success("根据pId查询住院成功", this.bedService.findBedByPid(pId));
    }

    /**
     * 分页模糊查询所有床位信息
     *
     * @param pageNumber 当前页码
     * @param size       每页大小
     * @param query      查询条件
     * @return 返回床位信息
     */
    @RequestMapping("findAllBeds")
    public ResponseData findAllBeds(int pageNumber, int size, String query) {
        System.out.println("[findAllBeds] 请求开始，时间：" + System.currentTimeMillis() + "，pageNumber：" + pageNumber + "，size：" + size + "，query：" + query);
        // 调用 bedService 中的 findAllBeds 方法分页查询所有床位信息
        return ResponseData.success("返回所有床位信息成功", this.bedService.findAllBeds(pageNumber, size, query));
    }

    /**
     * 根据床位ID查询床位信息
     *
     * @param bId 床位ID
     * @return 返回床位信息
     */
    @RequestMapping("findBed")
    public ResponseData findBed(int bId) {
        System.out.println("[findBed] 请求开始，时间：" + System.currentTimeMillis() + "，bId：" + bId);
        // 调用 bedService 中的 findBed 方法根据床位ID查询床位信息
        return ResponseData.success("根据id查找床位成功", this.bedService.findBed(bId));
    }

    /**
     * 增加床位信息
     *
     * @param bed 床位信息
     * @return 返回操作结果
     */
    @RequestMapping("addBed")
    @ResponseBody
    public ResponseData addBed(Bed bed) {
        System.out.println("[addBed] 请求开始，时间：" + System.currentTimeMillis() + "，bed：" + bed);
        // 调用 bedService 中的 addBed 方法增加床位信息
        Boolean bo = this.bedService.addBed(bed);
        if (bo) {
            return ResponseData.success("增加床位信息成功");
        }
        return ResponseData.fail("增加床位信息失败！床号或已被占用");
    }

    /**
     * 删除床位信息
     *
     * @param bId 床位ID
     * @return 返回删除结果
     */
    @RequestMapping("deleteBed")
    public ResponseData deleteBed(@RequestParam(value = "bId") int bId) {
        System.out.println("[deleteBed] 请求开始，时间：" + System.currentTimeMillis() + "，bId：" + bId);
        // 调用 bedService 中的 deleteBed 方法删除床位信息
        Boolean bo = this.bedService.deleteBed(bId);
        if (bo) {
            return ResponseData.success("删除床位信息成功");
        }
        return ResponseData.fail("删除床位信息失败");
    }

    /**
     * 清空床位信息
     *
     * @param bId 床位ID
     * @return 返回清空结果
     */
    @RequestMapping("emptyBed")
    public ResponseData emptyBed(int bId) {
        System.out.println("[emptyBed] 请求开始，时间：" + System.currentTimeMillis() + "，bId：" + bId);
        // 调用 bedService 中的 emptyBed 方法清空床位信息
        if (this.bedService.emptyBed(bId))
            return ResponseData.success("清空床位信息成功");
        return ResponseData.fail("清空床位信息失败");
    }

    /**
     * 统计今天的住院人数
     *
     * @return 返回住院人数统计结果
     */
    @RequestMapping("bedPeople")
    public ResponseData bedPeople() {
        String bStart = TodayUtil.getTodayYmd();
        System.out.println("[bedPeople] 请求开始，时间：" + System.currentTimeMillis() + "，bStart：" + bStart);
        // 调用 bedService 中的 bedPeople 方法统计今天的住院人数
        return ResponseData.success("统计今天住院人数成功", Optional.of(this.bedService.bedPeople(bStart)));
    }
}
